#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;
typedef struct LinkNode
{
  ElemType data;
  struct LinkNode *next;
} * LinkStack;

// 初始化
bool InitLinkStack(LinkStack &S)
{
  // 不带头结点的版本
  S->next = NULL;
  return true;
}

// 插入操作(栈只在头结点进行操作)
bool Push(LinkStack &S, ElemType e)
{
  LinkStack s = (LinkStack)malloc(sizeof(LinkNode));
  if (s == NULL)
    return false;
  s->data = e;
  s->next = S->next;
  S->next = s;
  return true;
}

// 删除操作(栈只在头结点进行操作)
bool Pop(LinkStack &S, ElemType &e)
{
  if (S->next == NULL)
    return false;
  LinkStack temp = S->next; // 指向被删除的节点
  e = temp->data;           // 返回被删除的元素
  S->next = temp->next;
  free(temp);
  return true;
}

// 获取栈顶元素
bool GetTop(LinkStack S, ElemType &e)
{
  if (S->next == NULL)
    return false;
  e = S->next->data;
  return true;
}

int main() {}